perm filename 2BYN.SAI[PUZ,HPM] blob sn#163929 filedate 1975-06-18 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00003 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN "2 BY N"
C00004 00003	SETFORMAT(0,3)
C00007 ENDMK
C⊗;
BEGIN "2 BY N"
PRELOAD_WITH 0,8,36,13,24,5,23,28,35,6,19,15,34,10,40,22,17,
             30,14,38,26,7,29,16,20,9,39;
INTEGER ARRAY AL["@":"Z"];

INTEGER ARRAY QAL["A":"Z"];

INTEGER I,J,K,L,M,N,O,FL,SL,BEST,LEN,TRIAL; STRING WD1,WD2,WORD;

BOOLEAN ARRAY EXS["A":"Z","A":"Z"];

COMMENT set up existence table for 2 by 2 words;

FOR J←"A" STEP 1 UNTIL "Z" DO
   BEGIN
   INTEGER BRK,FLG; BOOLEAN EOF;
   OPEN(1,"DSK",0,2,0,30,BRK,EOF);
   LOOKUP(1,"DIC."&J&"2",FLG);
   SETBREAK(1,'12," "&'15&'13&'14&"`"&"'","INS");
   FOR I←"A" STEP 1 UNTIL "Z" DO EXS[J,I]←FALSE;
   WHILE ¬EOF DO
      BEGIN
      WORD←INPUT(1,1);
      IF LENGTH(WORD)=2∧WORD=J THEN EXS[J,WORD[2 TO 2]]←TRUE;
      END;
   CLOSE(1);
   END;

COMMENT now rank letters by value;

FOR I←"A" STEP 1 UNTIL "Z" DO QAL[I]←I;

FOR I←"B" STEP 1 UNTIL "Z" DO FOR J←"A" STEP 1 UNTIL I-1 DO
   IF AL[QAL[J]]<AL[QAL[I]] THEN QAL[J]↔QAL[I];

FOR I←"A" STEP 1 UNTIL "Z" DO OUTSTR(QAL[I]&" ");
SETFORMAT(0,3);
FOR LEN←2 STEP 1 UNTIL 6 DO

   BEGIN
   INTEGER BRK,FLG,WLEN; BOOLEAN EOF;
   OUTSTR('15&'12&CVD(LEN)&" LETTER WORDS"&'15&'12);
   BEST←0;
   FOR L←"A" STEP 1 UNTIL "Z" DO
      BEGIN
      FL←QAL[L];

      OPEN(1,"DSK",0,2,0,30,BRK,EOF);
      LOOKUP(1,"TOPS."&FL&CVS(LEN),FLG);
      SETBREAK(1,'12," "&'15&'13&'14&"'"&"`","INS");

      WHILE ¬EOF DO IF LENGTH(WD1←WORD←INPUT(1,1))=LEN∧WORD=FL THEN
      FOR M←"A" STEP 1 UNTIL "Z" DO IF EXS[FL,SL←QAL[M]] THEN
         BEGIN
         INTEGER BRK,FLG; BOOLEAN EOF2;

         OPEN(2,"DSK",0,2,0,30,BRK,EOF2);
         LOOKUP(2,"TOPS."&SL&CVS(LEN),FLG);
         SETBREAK(2,'12," "&'15&'13&'14&"'"&"`","INS");
         WHILE ¬EOF2 DO IF LENGTH(WD2←WORD←INPUT(2,1))=LEN∧WORD=SL THEN
            BEGIN
            I←1;
            WHILE I≤LEN∧EXS[WD1[I TO I],WD2[I TO I]] DO I←I+1;
            IF I>LEN THEN
               BEGIN
               INTEGER TRIAL;
               TRIAL←0; FOR I←1 STEP 1 UNTIL LEN DO
                        TRIAL←TRIAL+AL[WD1[I TO I]]+AL[WD2[I TO I]];
               IF TRIAL≥BEST THEN OUTSTR(WD1&'15&'12&WD2&" -- "&
                     CVS(BEST←TRIAL)&"  MERIT "&CVF(TRIAL/(2*LEN+2))&
                                                      '15&'12&'12&'12);
               END;
            END;
         CLOSE(2);
         END;
      CLOSE(1);
      END;

   END;
END;